.NET Core CLI
1. 개요
1. 개요
.NET Core Command-Line Interface (.NET Core CLI)는 Microsoft가 개발한, .NET Core 애플리케이션을 개발, 빌드, 실행 및 게시하기 위한 플랫폼 간 명령줄 도구 모음이다. 이 도구는 .NET Core SDK에 포함되어 배포되며, Visual Studio나 Visual Studio Code와 같은 통합 개발 환경 없이도 프로젝트 생성, 라이브러리 관리, 애플리케이션 실행, 종속성 관리, 테스트 실행 등 개발 전반의 작업을 수행할 수 있게 해준다.
CLI의 기본 명령 구조는 dotnet 드라이버, 명령어, 인자 및 옵션으로 이루어진다. 예를 들어 dotnet new console은 새로운 콘솔 애플리케이션 프로젝트를 생성하고, dotnet run은 프로젝트를 빌드한 후 즉시 실행한다. 주요 명령어로는 new, restore, build, run, test, publish, clean 등이 있으며, NuGet 패키지 관리나 솔루션 파일 관리와 같은 고급 작업도 지원한다.
이 도구는 ASP.NET Core, 클래스 라이브러리, 단위 테스트 프로젝트 등 다양한 프로젝트 템플릿을 제공한다. 개발자는 명령줄을 통해 프로젝트의 전체 라이프사이클을 효율적으로 관리할 수 있으며, 이는 지속적 통합 및 지속적 배포 파이프라인을 구성하거나 서버 환경에서 작업할 때 특히 유용하다. .NET Core CLI의 등장으로 윈도우, 리눅스, macOS 등 다양한 운영체제에서 일관된 개발 경험을 제공하는 크로스 플랫폼 개발이 본격화되었다.
2. 주요 명령어
2. 주요 명령어
2.1. 프로젝트 및 솔루션 관리
2.1. 프로젝트 및 솔루션 관리
.NET Core CLI는 프로젝트와 솔루션의 생성 및 관리를 위한 핵심 명령어들을 제공한다. dotnet new 명령어는 새로운 프로젝트를 생성하는 데 사용되며, 다양한 템플릿을 지정할 수 있다. 예를 들어 dotnet new console은 콘솔 애플리케이션을, dotnet new classlib는 클래스 라이브러리를, dotnet new mvc는 ASP.NET Core MVC 웹 애플리케이션을 생성한다. -n 또는 --name 옵션으로 프로젝트 이름을, -o 또는 --output 옵션으로 출력 디렉터리를 지정할 수 있어 프로젝트 구조를 유연하게 구성할 수 있다.
여러 프로젝트를 포함하는 솔루션 파일(.sln)을 관리하기 위해 dotnet sln 명령어를 사용한다. dotnet new sln으로 빈 솔루션을 생성한 후, dotnet sln add <프로젝트 경로> 명령어를 통해 기존 프로젝트를 솔루션에 추가할 수 있다. 반대로 dotnet sln remove <프로젝트 경로>를 사용하면 솔루션에서 프로젝트를 제거한다. 이 명령어들은 Visual Studio와 같은 통합 개발 환경 없이도 명령줄에서 솔루션의 구성을 효과적으로 관리할 수 있게 해준다.
프로젝트 간의 참조 관계를 설정할 때는 dotnet add reference와 dotnet remove reference 명령어가 사용된다. 예를 들어, 라이브러리 프로젝트를 애플리케이션 프로젝트에 추가하려면 애플리케이션 프로젝트 디렉터리에서 dotnet add reference ../MyLibrary/MyLibrary.csproj를 실행한다. dotnet list reference 명령어는 현재 프로젝트가 참조하고 있는 모든 프로젝트 참조 목록을 보여준다. 이러한 명령어들은 MSBuild 프로젝트 파일(.csproj)을 직접 편집하지 않고도 의존성을 관리하는 편리한 방법을 제공한다.
2.2. 빌드 및 실행
2.2. 빌드 및 실행
dotnet build 명령은 프로젝트의 소스 코드를 컴파일하고 실행 가능한 어셈블리나 라이브러리를 생성한다. 이 명령은 프로젝트 파일(.csproj)에 정의된 모든 종속성을 확인하고, 필요한 경우 이를 복원한 후 MSBuild 엔진을 사용하여 실제 빌드 작업을 수행한다. 빌드 출력물은 기본적으로 bin/Debug 또는 bin/Release 디렉터리에 생성되며, --output 옵션을 사용하여 출력 경로를 직접 지정할 수 있다.
dotnet run 명령은 빌드와 실행을 하나의 단계로 결합한다. 이 명령을 실행하면 먼저 dotnet build가 암시적으로 수행되어 최신 코드를 컴파일한 후, 생성된 어셈블리를 즉시 실행한다. 이는 개발 중에 코드 변경 사항을 빠르게 테스트하는 데 매우 유용하다. dotnet run은 프로젝트 디렉터리에서 실행해야 하며, 추가적인 인자를 메인 메서드에 전달할 수도 있다.
dotnet publish 명령은 애플리케이션을 배포하기 위해 최종 패키지를 준비한다. 이 명령은 애플리케이션 코드, 모든 런타임 종속성, 그리고 구성 파일을 단일 폴더로 묶는다. -c 옵션으로 릴리스 구성(Release)을 지정하면 성능 최적화가 적용된 빌드가 생성된다. 게시된 출력물은 호스팅 서버나 컨테이너 이미지 등에 복사하여 독립적으로 실행할 수 있다.
빌드와 실행 과정에서 발생하는 문제를 진단하려면 dotnet build --verbosity detailed나 dotnet run --diagnostics와 같은 명령을 사용하여 상세한 로그 정보를 확인할 수 있다. 또한 dotnet clean 명령은 이전 빌드에서 생성된 모든 출력 파일을 정리하여 깨끗한 상태에서 새 빌드를 시작할 수 있게 한다.
2.3. 패키지 관리
2.3. 패키지 관리
.NET Core CLI의 dotnet add, dotnet remove, dotnet list, dotnet restore 명령어를 통해 프로젝트의 NuGet 패키지 종속성을 관리할 수 있다. dotnet add package 명령어는 프로젝트 파일(.csproj)에 지정된 패키지 참조를 추가하며, dotnet remove package 명령어는 이를 제거한다. dotnet list package 명령어는 현재 프로젝트에 설치된 패키지 목록을 보여주고, dotnet restore 명령어는 프로젝트 파일에 정의된 모든 패키지 종속성을 다운로드하여 복원한다.
패키지 관리 작업은 주로 프로젝트 파일이 위치한 디렉토리에서 수행된다. 예를 들어, Newtonsoft.Json 패키지를 추가하려면 dotnet add package Newtonsoft.Json 명령을 실행한다. 이 명령은 최신 안정 버전의 패키지를 기본적으로 설치하며, --version 옵션을 사용하여 특정 버전을 지정할 수도 있다. 패키지 복원은 빌드나 실행 명령이 내부적으로 자동 수행하기도 하지만, 명시적으로 dotnet restore를 실행하여 네트워크 또는 캐시 문제를 해결할 때 유용하다.
패키지 소스 관리와 관련된 고급 명령어도 제공된다. dotnet nuget add source를 통해 사용자 정의 패키지 저장소를 추가하거나, dotnet nuget list source로 현재 구성된 소스 목록을 확인할 수 있다. 이는 조직 내부의 사설 NuGet 피드를 사용하거나 특정 패키지 공급처를 관리할 때 필요하다.
2.4. 테스트 실행
2.4. 테스트 실행
.NET Core CLI의 dotnet test 명령은 프로젝트에 정의된 단위 테스트를 실행하는 데 사용된다. 이 명령은 프로젝트 파일(.csproj)에 지정된 테스트 러너를 사용하여 테스트를 검색하고 실행한다. 일반적으로 사용되는 테스트 프레임워크로는 MSTest, NUnit, xUnit 등이 있으며, 각각에 맞는 테스트 프로젝트 템플릿을 dotnet new 명령으로 생성할 수 있다. dotnet test는 프로젝트를 자동으로 빌드한 후 테스트를 실행하므로, 별도의 dotnet build 명령이 필요하지 않다.
테스트 실행 시 다양한 옵션을 사용하여 동작을 제어할 수 있다. 예를 들어, --filter 옵션으로 특정 조건을 만족하는 테스트만 실행하거나, --logger 옵션으로 테스트 결과의 출력 형식을 지정할 수 있다. 또한 --results-directory 옵션을 사용하면 테스트 결과 파일을 특정 경로에 저장할 수 있다. CI/CD 파이프라인에서는 이러한 옵션들을 활용하여 자동화된 테스트를 구성하는 경우가 많다.
dotnet test 명령은 솔루션 파일(.sln)을 대상으로 실행할 수도 있으며, 이 경우 솔루션 내 모든 테스트 프로젝트의 테스트가 실행된다. 테스트 실행 후에는 성공, 실패, 건너뜀 등의 결과가 요약되어 콘솔에 출력되며, 실패한 테스트의 상세 정보도 확인할 수 있다. 이 명령은 .NET Core 애플리케이션의 코드 품질을 보장하고 리팩토링의 안전성을 높이는 데 필수적인 도구이다.
3. 설치 및 구성
3. 설치 및 구성
.NET Core CLI는 .NET Core SDK에 포함되어 배포되므로 별도 설치가 필요하지 않다. SDK 설치 시 CLI 도구가 함께 설치된다. .NET Core SDK는 마이크로소프트 공식 웹사이트나 각 운영체제의 패키지 관리자를 통해 다운로드 및 설치할 수 있다. 주요 설치 방법으로는 Windows용 설치 프로그램, macOS용 PKG 파일, Linux 배포판용 패키지 관리자 명령어 등이 있다.
설치가 완료되면 터미널이나 명령 프롬프트에서 dotnet --version 명령을 실행하여 설치된 SDK 버전을 확인할 수 있다. 이는 CLI가 정상적으로 구성되었는지 검증하는 기본적인 방법이다. 또한 dotnet --info 명령을 사용하면 설치된 SDK와 런타임의 상세 정보, 현재 작업 디렉토리, 그리고 사용 중인 글로벌 설정 파일의 경로 등을 확인할 수 있다.
CLI의 동작은 global.json 파일을 통해 세부적으로 구성할 수 있다. 이 파일은 프로젝트 디렉토리 구조 내에 위치하며, 사용할 .NET SDK의 버전을 명시적으로 지정하는 역할을 한다. 이를 통해 여러 버전의 SDK가 설치된 환경에서 특정 프로젝트가 원하는 SDK 버전을 사용하도록 고정할 수 있다. dotnet new globaljson 명령을 실행하면 현재 최신 SDK 버전을 대상으로 하는 global.json 파일을 쉽게 생성할 수 있다.
CLI는 크로스 플랫폼 도구이므로 윈도우, 리눅스, macOS 등 다양한 운영체제에서 동일한 명령어 체계로 사용할 수 있다. 이는 지속적 통합 및 지속적 배포 파이프라인에서 스크립트를 통일할 수 있어 개발 워크플로우의 효율성을 높인다.
4. 작업 자동화 및 스크립팅
4. 작업 자동화 및 스크립팅
.NET Core CLI는 단순히 개별 명령어를 실행하는 것을 넘어, 반복적인 개발 작업을 자동화하고 스크립트를 통해 일련의 과정을 관리하는 데 유용하게 활용된다. 명령줄의 특성을 살려 CI/CD 파이프라인에 통합하거나, 배치 작업을 구성하는 데 적합하다. 예를 들어, 애플리케이션을 빌드(dotnet build), 테스트(dotnet test), 그리고 게시(dotnet publish)하는 전체 과정을 하나의 셸 스크립트나 배치 파일로 묶어 실행할 수 있다.
주요 운영체제의 기본 스크립팅 기능과 잘 호환된다. Windows에서는 PowerShell 스크립트나 .cmd 배치 파일을, Linux 및 macOS에서는 Bash 스크립트를 작성하여 CLI 명령어들을 조합할 수 있다. 또한 dotnet watch 명령어를 사용하면 소스 코드 파일의 변경을 감지하고 자동으로 애플리케이션을 다시 빌드 및 실행하는 핫 리로드 개발 워크플로를 구현할 수 있어, 개발 생산성을 높이는 데 기여한다.
더 복잡한 작업 자동화를 위해서는 MSBuild 스크립트(.csproj 파일)를 직접 편집하여 사용자 정의 빌드 타겟과 작업을 정의할 수 있다. .NET Core CLI는 내부적으로 MSBuild 엔진을 사용하므로, dotnet msbuild 명령을 통해 이러한 사용자 정의 빌드 로직을 명령줄에서 직접 실행하고 제어할 수 있다. 이는 패키지 버전 관리, 출력물 정리, 다중 프로젝트 빌드 순서 조정 등 고급 빌드 시나리오에 필수적이다.
5. 환경 변수 및 구성
5. 환경 변수 및 구성
.NET Core CLI는 환경 변수와 구성 파일을 통해 동작을 세밀하게 제어할 수 있다. 주요 구성 요소로는 global.json, NuGet.Config, 그리고 프로젝트별 appsettings.json이나 런타임 구성 파일 등이 있다. global.json 파일은 사용할 .NET SDK의 버전을 명시적으로 지정하여 프로젝트 간 일관성을 유지하는 데 사용된다. 이 파일은 프로젝트 디렉터리나 상위 디렉터리에 위치할 수 있으며, dotnet new globaljson 명령으로 생성할 수 있다.
CLI 명령의 동작은 여러 환경 변수에 의해 영향을 받는다. 예를 들어, DOTNET_CLI_TELEMETRY_OPTOUT 변수를 설정하면 원격 분석 데이터 수집을 비활성화할 수 있으며, DOTNET_ROOT는 .NET 런타임의 설치 위치를 지정한다. 빌드 및 실행과 관련하여 DOTNET_BUILD_SKIP_PACKAGE_VALIDATION이나 DOTNET_RUNNING_IN_CONTAINER 같은 변수도 특정 동작을 제어한다. 이러한 변수들은 명령줄 인터페이스 스크립트나 운영 체제의 설정을 통해 관리된다.
NuGet 패키지 관리를 위한 구성은 NuGet.Config 파일에서 이루어진다. 이 파일을 통해 패키지 소스, 자격 증명, 캐시 정책 등을 프로젝트 또는 사용자 수준에서 정의할 수 있다. 또한, dotnet nuget 명령어 하위의 add source, list source 등의 명령을 사용하여 이 구성을 동적으로 수정할 수도 있다. 애플리케이션의 런타임 구성은 JSON 형식의 appsettings.json 파일이나 환경별 appsettings.{Environment}.json 파일을 주로 사용하며, 의존성 주입 컨테이너를 통해 접근된다.
6. 고급 사용법
6. 고급 사용법
6.1. 전역 도구
6.1. 전역 도구
전역 도구는 .NET Core CLI를 확장하는 NuGet 패키지로, 시스템 전역에 설치하여 명령줄에서 직접 실행할 수 있는 독립 실행형 콘솔 애플리케이션이다. dotnet tool install -g 명령어를 사용하여 설치하며, 설치 후에는 dotnet 명령어 없이 도구 자체의 이름만으로 어느 디렉터리에서나 실행이 가능하다. 이는 개발 워크플로우를 자동화하거나, 코드 생성, 정적 분석, 배포 스크립트 실행 등 다양한 보조 작업을 수행하는 데 널리 활용된다.
전역 도구의 설치, 목록 확인, 업데이트, 제거는 각각 dotnet tool install, dotnet tool list, dotnet tool update, dotnet tool uninstall 명령어로 관리한다. 대표적인 예로 dotnet-ef 도구는 Entity Framework Core 마이그레이션을 관리하고, dotnet-script는 C# 스크립트를 실행하며, dotnet-reportgenerator는 단위 테스트 커버리지 보고서를 생성한다. 이러한 도구들은 공식 Microsoft 제공 도구와 서드파티 커뮤니티 도구 모두 포함한다.
전역 도구와 대비되는 개념으로 로컬 도구가 있다. 로컬 도구는 특정 프로젝트나 리포지토리 범위에서만 사용되도록 dotnet-tools.json 구성 파일에 정의되어 관리된다. 이는 팀 프로젝트에서 모든 개발자가 동일한 빌드나 분석 도구 버전을 공유해야 할 때 유용하다. 전역 도구는 시스템 전체에 영향을 미치므로, 프로젝트별 의존성을 명시적으로 관리해야 하는 경우에는 로컬 도구 사용이 권장된다.
6.2. 사용자 정의 템플릿
6.2. 사용자 정의 템플릿
사용자 정의 템플릿은 dotnet new 명령을 통해 프로젝트, 파일 또는 솔루션을 생성할 때 사용할 수 있는 재사용 가능한 청사진이다. 기본적으로 .NET Core SDK는 콘솔 애플리케이션, 클래스 라이브러리, ASP.NET Core 웹 애플리케이션, MVC, Web API 등 다양한 표준 템플릿을 제공한다. 그러나 개발자는 특정 조직의 표준, 아키텍처 패턴 또는 반복적인 프로젝트 구조를 자동화하기 위해 자신만의 템플릿을 만들고 설치할 수 있다.
사용자 정의 템플릿은 NuGet 패키지로 패키징되거나 로컬 디렉터리에서 직접 참조될 수 있다. 템플릿은 템플릿 구성 파일(.template.config/template.json), 소스 파일, 그리고 필요시 스크립트로 구성된다. 구성 파일에서는 템플릿의 이름, 설명, 기호, 그리고 사용자가 dotnet new 명령 실행 시 제공할 수 있는 매개변수를 정의한다. 이를 통해 동적으로 파일 내용이나 프로젝트 구조를 조정할 수 있다.
템플릿을 설치하려면 dotnet new --install <템플릿-패키지-경로 또는 디렉터리> 명령을 사용한다. 설치 후 dotnet new --list 명령으로 사용 가능한 템플릿 목록에서 확인할 수 있다. 템플릿을 사용할 때는 dotnet new <템플릿-간단한-이름> 명령에 -n(이름), -o(출력 디렉터리) 같은 옵션과 함께 템플릿에 정의된 사용자 기호를 전달하여 프로젝트를 생성한다. 이 기능은 표준화와 개발 생산성 향상에 기여한다.
